import request from '@/utils/request'
import { getUserInfo, setUserInfo } from '@/utils/auth'

// 获取验证码
export function getCaptcha() {
    const timestamp = new Date().getTime() // 添加时间戳避免缓存
    console.log(`获取验证码，路径: /captcha?t=${timestamp}`)
    
    return request({
        url: `/captcha?t=${timestamp}`,
        method: 'get',
        timeout: 10000, // 增加超时时间
        retry: 3, // 添加重试次数
        retryDelay: 1000 // 重试延迟
    })
}

// 发送注册验证码
export function sendVerifyCode(phone) {
    return request({
        url: '/system/user/register/send-code',
        method: 'post',
        data: { phone }
    })
}

// 用户登录
export function login(data) {
    return request({
        url: '/auth/login',
        method: 'post',
        data: {
            username: data.username,
            password: data.password,
            code: data.code,
            uuid: data.uuid
        }
    })
}

// 获取用户信息
export function getInfo() {
    return request({
        url: '/getInfo',
        method: 'get',
        validateStatus: function (status) {
            return status >= 200 && status < 300
        }
    })
}

// 更新用户信息
export async function updateUserInfo(data) {
    // 记录请求数据以便调试
    console.log('提交的用户数据:', data);
    
    try {
        // 创建请求数据对象
        const requestData = {
            username: data.username,
            nickName: data.nickname || '',
            email: data.email || '',
            phone: data.phone || '',
            sex: data.sex || '0',
            userId: data.id || ''
        }
        
        console.log('调整后的请求数据:', requestData);
        
        // 使用后端实现的API路径
        const apiPath = '/system/user/profile';
        
        // 如果有头像数据，并且是base64格式
        if (data.avatar && data.avatar.startsWith('data:image')) {
            try {
                // 将Base64图像转换为Blob
                const response = await fetch(data.avatar);
                const blob = await response.blob();
                
                const formData = new FormData();
                // 添加头像文件，参数名为avatar
                formData.append('avatar', blob, 'avatar.png');
                
                // 添加其他用户信息
                for (const key in requestData) {
                    if (key === 'username' || key === 'userId') continue; // 不传递用户名和ID
                    if (key === 'phone') {
                        formData.append('phone', requestData[key]);
                    } else {
                        formData.append(key, requestData[key]);
                    }
                }
                
                console.log('发送表单数据请求，包含头像文件');
                return request({
                    url: apiPath,
                    method: 'post',
                    data: formData,
                    headers: {
                        'Content-Type': 'multipart/form-data'
                    }
                });
            } catch (error) {
                console.error('处理头像文件时出错:', error);
                throw error;
            }
        } else {
            // 无头像的请求，使用JSON格式
            const jsonData = {};
            for (const key in requestData) {
                if (key === 'username' || key === 'userId') continue; // 不传递用户名和ID
                if (key === 'phone') {
                    jsonData.phone = requestData[key];
                } else {
                    jsonData[key] = requestData[key];
                }
            }
            
            // 如果有非base64格式的头像URL，也添加进去
            if (data.avatar && !data.avatar.startsWith('data:image')) {
                jsonData.avatar = data.avatar;
            }
            
            console.log('发送JSON请求:', jsonData);
            return request({
                url: apiPath,
                method: 'post',
                data: jsonData
            });
        }
    } catch (error) {
        console.error('更新用户信息请求发生错误:', error);
        throw error;
    }
}

// 用户注册
export function register(data) {
    console.log('注册请求数据:', data)
    
    // 构建符合后端期望的请求数据格式
    const requestData = {
        username: data.username,
        password: data.password,
        confirmPassword: data.confirmPassword || data.password,
        nickName: data.nickName || data.username,
        phoneNumber: data.phone, // 使用phoneNumber字段，与后端DTO一致
        email: data.email || '',
        sex: data.sex || '0',
        verifyCode: data.code,     // 后端期望verifyCode而不是code
        uuid: data.uuid,           // uuid用于图形验证码验证
        registerSource: data.registerSource || '1'
    }
    
    console.log('最终注册请求数据:', requestData)
    
    return new Promise((resolve, reject) => {
        request({
            url: '/system/user/register',
            method: 'post',
            data: requestData,
            headers: {
                'Content-Type': 'application/json'
            },
            timeout: 30000  // 增加超时时间到30秒
        }).then(response => {
            console.log('注册响应成功:', response)
            
            // 如果后端返回token和用户信息，保存到本地
            if (response.code === 200 && response.data && response.data.token) {
                // 保存token和用户信息
                localStorage.setItem('token', response.data.token)
                if (response.data.user) {
                    setUserInfo(response.data.user)
                }
            }
            
            resolve(response)
        }).catch(error => {
            console.error('注册请求失败:', error)
            // 如果后端返回了具体错误信息
            if (error.response && error.response.data) {
                console.error('后端返回错误:', error.response.data)
                reject(error.response.data)
            } else {
                reject(error)
            }
        })
    })
}

// 修改密码
export function updatePassword(data) {
    return request({
        url: '/system/user/password',
        method: 'put',
        data
    })
}

// 修改密码函数别名，用于匹配Profile.vue中的导入
export const changePassword = updatePassword;

// 退出登录
export function logout() {
    return request({
        url: '/logout',
        method: 'post'
    })
}

// 获取用户收藏列表
export function getFavorites() {
    return request({
        url: '/system/user/favorites',
        method: 'get'
    })
}

// 添加收藏
export function addFavorite(data) {
    return request({
        url: '/system/user/favorites',
        method: 'post',
        data
    })
}

// 取消收藏
export function removeFavorite(id) {
    return request({
        url: `/system/user/favorites/${id}`,
        method: 'delete'
    })
}

// 获取浏览历史
export function getHistory() {
    return request({
        url: '/system/user/history',
        method: 'get'
    })
}

// 清空浏览历史
export function clearHistory() {
    return request({
        url: '/system/user/history',
        method: 'delete'
    })
} 